這篇系列文主要帶大家走向人工智慧之路,在這之前先帶大家總覽一下 AI 工程師平常可能都在做些什麼?但其實筆者入職不算太久,經驗還不是很資深,跌跌撞撞的也是做了快三年而已。
想瞭解一個職位的內容,最好的方式就是上求職網看看他的能力需求。筆者在 104 輸入 AI 關鍵字查詢,跳出來的第一筆結果是來自可樂旅遊的 AI 工程師職位,其工作內容如下:
資料清洗、特徵工程、機器學習,這些到底都是什麼 😵💫
再往下看看其他條件要求:
RAG、Git、Python、函式庫、爬蟲,這些術語對不在這個領域裡面的人,恐怕都是只聞其名不見其人的存在。如果繼續查看其他職位,還有什麼 PyTorch、Tensorflow 或者 Flask、Django 甚至是 Docker 之類的技術要求,程式語言方面有些還會要求 C/C++/Java 等,還有些跨領域的需求,例如醫療、金融等等。這些職缺看下來,所謂的 AI 工程師幾乎是包山包海的程度了 😱
多數的公司為了營利,會很著重在產品化上,因此有許多技能需求,其實都是與產品相關的。筆者認為 AI 工程師的職務大致可以劃分成三大類:資料、模型、應用。
在人工智慧熱門起來之前,還有個很受歡迎的詞彙叫做大數據,簡單來說就是很多很多資料。當資料只有數百數千筆時,可能沒有什麼顯著的作用,處理起來也很簡單。但是當資料筆數高達數百萬、數千萬時,這一切就開始複雜起來了 🧐
諸如此類與資料息息相關的問題,都算在 AI 工程師的職務範圍裡面,也有人稱為資料工程師之類的,算是驅動整個人工智慧領域最基礎也最重要的一步。但尋常普通人其實很難接觸到大規模的資料,因此我們會從小規模開始著手練習。
- 關鍵字:
- 網路爬蟲 (Web Crawler)
- 資料清洗 (Data Cleaning)
- 特徵工程 (Feature Engineering)
網路爬蟲指的是將網路上的資料給爬取下來,資料清洗是指將修正或捨棄品質不好的資料,特徵工程則是在尋找資料中的哪些欄位或資訊具有顯著性。
例如說,今天想要製作一個仇恨言論偵測系統,可能可以從 PTT 八卦板之類的網路論壇來爬取文本資料,如何正確爬取並解析文章格式,將文章解析成標題、內文、留言等等的欄位,或者爬取某個日期範圍的文章之類的,都算是網路爬蟲的工作。
從 PTT 上面來的資料可能未必每一筆都是合適的,例如空白文、公告文、樂透文這些較不具有實質意義的文本可能就會被捨棄掉,另外像是回覆到看板的回文可能會包含原文造成重複性,這時也可能需要設計一個程式來去除掉這些重複的資料,這屬於資料清洗的範疇。
最後,我們想知道哪些文章可能帶有仇恨言論,是否具有仇恨言論的文本都具備相似的特徵呢?例如說標題有肥宅或髒話之類的情緒性字眼,是否比較容易是帶有仇恨言論的文章?可以透過一些關鍵字的分析來瞭解文本特徵與任務目標之間的相關性有多高,就算是一種特徵工程的任務。
實際上,特徵是個更為複雜的概念,留待未來的章節再來細細介紹。
啊抱歉,不是這種模型,這裡指的是根據大量資料分析訓練而來的數學模型。無論是透過簡單的統計手法計算出來的機率,或是複雜的神經網路訓練出來的權重,都算是一種模型。負責這項工作的 AI 工程師,主要在研究如何建構與訓練模型,經常伴隨著大量的研究與實驗,經常需要去閱讀論文,看看人家都是如何設計模型架構與訓練模型。參考網路上各種不同的做法,試圖針對自身領域的應用訓練出一個適當的模型。
- 關鍵字:
- 機器學習 (Machine Learning, ML)
- 深度學習 (Deep Learning, DL)
- 神經網路 (Neural Network, NN)
機器學習指的是由機器去學習開發者所設定的目標,例如說我們已經建立好一份仇恨言論的資料集,這份資料集告訴我們什麼樣的文章是仇恨言論,什麼樣的文章不是仇恨言論,接著讓機器看著這些文章來學習,訓練一個可以進行分類任務的分類器。
大家發現這個分類器越大,分類的準確率就越高,當這些模型被越拉越大、越建越深,就產生了深度學習這個領域,深度學習屬於機器學習的分支,主要透過訓練一個神經網路來進行學習。
一開始可以想簡單一點,模型就是個專業做資源回收分類的傢伙。
應用就是將 AI 模型拿來實際使用,無論是重新創造一個系統,還是整合到現有的服務裡面,都有許多不同的細節需要處理。這個模型可能會部署在雲端伺服器,使用者透過網路來存取這個模型。或者模型被部署在地端裝置,例如手機裡面,在沒有網路的環境底下依然可以執行。
當模型部署在雲端時,同時可能會有大量的使用者在使用,要如何讓模型有效率的處理這些需求?當模型部署在地端時,手機這種裝置的硬體架構、作業系統、運算資源與雲端都大不相同,要如何將程式碼移植上去?要如何兼顧電力續航的同時,盡可能提供快速反應的辨識?這些屬於模型到應用端要考量的事情。
模型順利部署在雲端或地端後,就要開始考慮使用者的問題,這部份不外乎就是前端與後端。前端簡單來說指的是使用者操作的圖形化介面,畫面上要出現哪些按鈕、文字,要如何美美的編排這些與使用者互動的元件,都屬於前端的領域。而後端則是程式背後的處理邏輯,當使用者按下這顆按鈕時,程式要執行哪些步驟進行處理,這些使用者相對看不見的事情,就算是後端的事情。
- 關鍵字:
- 部署 & 服務 (Deploy & Serving)
- 前端 & 後端 (Frontend & Backend)
現在有了一個能夠分類仇恨言論的模型,身為一個網路論壇的管理員,要如何將他應用在系統裡面呢?可能會在每個會員發文留言時都用模型做一次檢查,如果把模型放在雲端,當有人在論壇上激烈討論時,要如何應付大量的貼文與留言同時湧入?
無論是資料、模型還是應用,在不同的領域上會有不一樣的發揮。例如自然語言處理 (Natural Language Processing, NLP) 就會著重在文字資料,電腦視覺 (Computer Vision, CV) 會著重在影像資料,程式自動交易則會著重在股市資料等等。不同領域的資料,適用的資料處理、模型架構與應用開發都各有不同。
因為筆者是學習 NLP 出身的,所以本系列文會相對著重在文字資料上。
本章節初步探索了 AI 工程師負責的職務,雖然一位獨當一面的 AI 工程師需要學會的東西可能遠不只於此,測試、版控等等不在話下。但千里之行使於足下,讓我們大處著眼、小處著手,從至少先學會寫點 Python 程式開始。